package com.open.basic.util;

import org.apache.commons.lang3.StringUtils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author: system
 * @Date: 2024/4/19 20:47
 * @Version: V1.0
 * @description: desc:校验数据工具类
 */
public final class CommonValidator {

    private CommonValidator() {

    }

    //此处声明，避免每次编译模式
    /**
     * 邮箱正则表达式
     */
    private final static Pattern EMAIL_PATTERN = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
    /**
     * 手机号正则表达式
     */
    private final static Pattern MOBILE_PATTERN = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0-9])|(17[0-9])|(19[0-9]))\\d{8}$");
    private final static Pattern PHONE_PATTERN = Pattern.compile("\\d{3,4}-\\d{7,8}");

    /**
     * 邮编正则表达式
     */
    private final static Pattern POSTCODE_PATTERN = Pattern.compile("[1-9]\\d{5}(?!\\d)");

    /**
     * 检测邮箱地址是否合法
     *
     * @param email 邮箱地址
     * @return true合法 false不合法
     */
    public static boolean isEmail(String email) {
        if (StringUtils.isBlank(email)) {
            return false;
        }
        // 复杂匹配
        Matcher m = EMAIL_PATTERN.matcher(email);
        return m.matches();
    }

    /**
     * 判断手机号是否合法
     *
     * @param mobiles 手机号
     * @return true合法 false不合法
     */
    public static boolean isMobile(String mobiles) {
        if (StringUtils.isBlank(mobiles)) {
            return false;
        }
        Matcher m = MOBILE_PATTERN.matcher(mobiles);
        return m.matches();
    }

    /**
     * 判断是否为固定电话
     *
     * @param phone 固定电话
     * @return
     */
    public static boolean isPhone(String phone) {
        if (StringUtils.isBlank(phone)) {
            return false;
        }

        Matcher m = PHONE_PATTERN.matcher(phone);
        return m.matches();
    }

    /**
     * 判断是否为手机或者固定电话
     *
     * @param mobileOrPhone 固话或者手机号
     * @return
     */
    public static boolean isMobileOrPhone(String mobileOrPhone) {
        if (StringUtils.isBlank(mobileOrPhone)) {
            return false;
        }
        return isMobile(mobileOrPhone) || isPhone(mobileOrPhone);
    }

    /**
     * 判断是否为邮编
     *
     * @param postCode 邮编
     * @return
     */
    public static boolean isPostCode(String postCode) {
        if (StringUtils.isBlank(postCode)) {
            return false;
        }
        Matcher m = POSTCODE_PATTERN.matcher(postCode);
        return m.matches();
    }

}
